package Controlador.Controladores;

import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Observable;

public class FuenteConexion extends Observable {
    //Propiedades   del Objeto
    private String Usuario="";
    private String Password="";
    private String ip="";
    private String BaseDatos="";
    private String[] Drivers={"MySql","Oracle","SQL Server"};
    
    //Otros Objetos y Variables que necesita la Clase
    private Connection con=null; 
    private int NumDriver=0;

    
    //Constructores
    public  FuenteConexion(){
   
        
    }
    
    //metodos
    public Connection conectar(){
        try {  
            switch (NumDriver) {
                case 0:
                    Class.forName("org.gjt.mm.mysql.Driver");
                    this.setCon((DriverManager.getConnection("jdbc:mysql://"+getIp()+"/"+getBaseDatos(), getUsuario(), getPassword())));
                    System.out.println("Conexion a "+this.getBaseDatos()+"...... OK");
                    break;
                case 1:
                    Class.forName("oracle.jdbc.driver.OracleDriver");
                    this.setCon(DriverManager.getConnection("jdbc:oracle:thin:@"+getIp(), getUsuario(), getPassword()));
                    System.out.println("Conexion a "+this.getBaseDatos()+"...... OK");
                    break;
                case 2:
                    System.out.println("Driver aun no Soportado");
                   
                    break;
                default:
                    throw new AssertionError();
            }
            
            } catch (ClassNotFoundException ex) {
                System.out.println("Exepcion 1: NO se ha podido cargar el driver de comunicación a la Base de Datos. \n"
                        + "     \t-Notifica que o las librerias de comunicacion no son las correctas o no han sido agregadas al proyecto.\n"+
                                "\t-Intente para Netbeans en Click derecho en librerias en su proyecto y agregar libreria. \n"+
                                "\t-En caso de no existir la librerias agregarla al ClassPath. \n");
            }catch (SQLException ex) {
                System.out.println("Exepcion 2: No se ha podido establecer la conexion al servidor elegido ("+this.getDrivers()[0]+
                                ").\n\t-Compruebe que los datos son los correctos y que tenga conexion a la red local o internet.");
            }
        
        return(con);
    }
    
    //Geters y Seters

    
 

    private Connection getCon() {
        return con;
    }


    private void setCon(java.sql.Connection con) {
        this.con = (Connection) con;
    }

  
    public String getUsuario() {
        return Usuario;
    }

 
    public void setUsuario(String Usuario) {
        this.Usuario = Usuario;
    }

 
    public String getPassword() {
        return Password;
    }

 
    public void setPassword(String Password) {
        this.Password = Password;
    }

 
    public String getIp() {
        return ip;
    }

  
    public void setIp(String ip) {
        this.ip = ip;
    }

 
    public String getBaseDatos() {
        return BaseDatos;
    }

 
    public void setBaseDatos(String BaseDatos) {
        this.BaseDatos = BaseDatos;
    }

   
    public String[] getDrivers() {
        return Drivers;
    }

   
    public void setDrivers(String[] Drivers) {
        this.Drivers = Drivers;
    }

//Pruebas de unidad
    
//    public static void main(String[] args) {
//        FuenteConexion fuenteConexion = new FuenteConexion();
//        fuenteConexion.setUsuario("u164902_sami");
//        fuenteConexion.setPassword("#19$09LGSP-1a");
//        fuenteConexion.setBaseDatos("u164902_sami");
//        fuenteConexion.setIp("sw-sami.com:3306");
//        
//        fuenteConexion.conectar();
//    }

 
}
